MongoDB 연결 실패 시 Troubleshooting 가이드
🛠️ MongoDB Atlas 연결 실패 시 Troubleshooting 가이드
🔍 문제 요약
MongoDB Atlas에 연결할 때 다음과 같은 에러가 발생할 수 있습니다:
PrismaClientInitializationError:
Error in connector: Error creating a database connection.
(An error occurred during DNS resolution: proto error: io error: No route to host (os error 65))
이 문제는 주로 mongodb+srv://
형태의 SRV DNS 해석 실패 또는 비정상적인 호스트 해석으로 인해 발생합니다.
특히 모바일 핫스팟, VPN, 사내망에서는 SRV 기반 연결에 실패할 가능성이 높습니다.
🧭 문제 원인
MongoDB Atlas의 기본 연결 URI는 mongodb+srv://
형태이며, 이는 다음을 포함합니다:
- SRV 레코드 질의:
_mongodb._tcp.<cluster>.mongodb.net
- A 레코드 질의: 각 shard hostname의 IP 주소 확인
- 접속 시도: 실제 IP를 사용한 연결
이 중 어느 단계에서든 실패할 경우 Prisma 또는 다른 Node.js 클라이언트에서 연결이 거부됩니다.
✅ 해결 절차
1. SRV 레코드 수동 확인
dig SRV _mongodb._tcp.<cluster>.mongodb.net
예시:
dig SRV _mongodb._tcp.standard-reservation.xxxxxx.mongodb.net
✅ 정상 결과 예시:
;; ANSWER SECTION:
_mongodb._tcp.standard-reservation.xxxxxx.mongodb.net. 300 IN SRV 0 0 27017 shard0-a.xxxxxx.mongodb.net.
_mongodb._tcp.standard-reservation.xxxxxx.mongodb.net. 300 IN SRV 0 0 27017 shard0-b.xxxxxx.mongodb.net.
_mongodb._tcp.standard-reservation.xxxxxx.mongodb.net. 300 IN SRV 0 0 27017 shard0-c.xxxxxx.mongodb.net.
2. 각 호스트에 대해 IP 주소 확인
dig shard0-a.xxxxxx.mongodb.net
예시 결과:
;; ANSWER SECTION:
shard0-a.xxxxxx.mongodb.net. 60 IN A 18.223.12.34
3. 공식 가이드를 통한 정확한 호스트/포트 구성 확인
SRV 수동 해석이 어렵거나 실패할 경우, MongoDB Atlas의 Connect Your Application 가이드를 통해 직접 연결 정보를 확인하세요:
🔗 경로:
- MongoDB Atlas → Clusters → Connect → Connect your application
- Step 6–7:
- 드라이버 버전은 최신 또는 Non-Stable API의 가장 낮은 버전 선택. 꼭 가장 낮은 버전을 선택해야 합니다
- 표시되는 Connection URI에서 다음 항목 확인:
-
@
뒤에 나오는 호스트명 리스트 (쉼표로 구분) -
각 호스트에 붙은 포트 번호
-
예:
mongodb://username:password@shard0-a.mongodb.net:27017,shard0-b.mongodb.net:27017,shard0-c.mongodb.net:27017/mydb?replicaSet=...
-
이 경로는 클러스터의 구체적인 토폴로지 및 연결 형식에 맞춰 구성되므로 가장 안정적인 방법입니다.
ChoiWheatley edit) 뒤에 있는 query param을 무시하면 안됩니다!!
4. Prisma나 기타 클라이언트에서 SRV 없이 연결
아래 형식으로 .env
또는 설정 파일에 직접 연결 정보를 입력합니다:
DATABASE_URL="mongodb://<user>:<pass>@<host1>:27017,<host2>:27017,<host3>:27017/<dbname>?replicaSet=<replicaSet>&authSource=admin&ssl=true"
예시:
DATABASE_URL="mongodb://admin:pass123@18.223.12.34:27017,3.22.45.67:27017,18.119.98.76:27017/mydb?replicaSet=atlas-abc123-shard-0&authSource=admin&ssl=true"
🚦 추가 점검 항목
항목 | 체크 |
---|---|
IP 화이트리스트 설정 | 0.0.0.0/0 설정이면 전역 허용됨 |
Prisma client에서 DNS 에러 발생 여부 | SRV 대신 Non-SRV URI 사용 필요 |
npx prisma db pull 명령 정상 작동 여부 |
URI 직접 입력 후 확인 |
네트워크 환경 문제 | 핫스팟, VPN, 로컬 DNS 확인 |
시스템 DNS 확인 | /etc/resolv.conf , dig , nslookup 등 |
📦 Prisma 사용 시 환경변수 예시
DATABASE_URL="mongodb://admin:pass123@18.223.12.34:27017,3.22.45.67:27017,18.119.98.76:27017/mydb?replicaSet=atlas-abc123-shard-0&authSource=admin&ssl=true"
⚠️
replicaSet
,authSource
,ssl=true
는 대부분의 Atlas 환경에서 필수입니다.
📚 참고 링크
- MongoDB Atlas: 연결 문제 해결 공식 가이드
- MongoDB Atlas: Connect your application
- Prisma MongoDB Connector Docs
🎉 정리
이 문서는 MongoDB Atlas 연결 이슈에 대해 SRV 기반 DNS 해석 실패, SRV 수동 해석, 공식 호스트 확인 가이드를 통한 정확한 URI 구성까지 전반적인 해결 전략을 제공합니다.
✅ 권장 접근 방식:
- SRV 해석이 가능하다면 그대로 사용
- 안 되면
dig
로 수동 해석 - 그마저도 불확실하면 Atlas UI에서 직접 Hostname/IP/Port 추출
- Prisma 또는 Node.js 클라이언트에서 직접 Non-SRV 형식 사용